package com.naiterui.ehp.bs.im.network.protocl;

import java.io.Serializable;

import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * 药方消息实体对应一JSON结构
 * 用于抽象医生向患者的推荐用药
 * <P>File name : Prescription.java </P>
 * <P>Author : zhouyanxin </P>
 * <P>Date : 2015年6月18日 </P>
 */
public class RecommandDrugItem implements IChecker, Serializable {

    /**
     * 字段或域定义：<code>serialVersionUID</code>
     */
    private static final long serialVersionUID = -7248904807441924378L;

    /**
     * LOGGER
     */
    private static final Logger LOGGER = LoggerFactory.getLogger(RecommandDrugItem.class);

    /**
     * 规格
     */
    private String spec;

    /**
     * 组合套餐
     */
    private String combin;

    /**
     * 商编 药品编号
     */
    private Long productId;

    /**
     * SKU ID
     */
    private Long skuId;

    /**
     * 商品名称
     */
    private String productName;

    /**
     * 购买数量
     */
    private Integer quantity;

    /**
     * 用法用量
     */
    private String usage;

    /**
     * 备注
     */
    private String bakup;

    /**
     * 通用药名
     */
    private String commonName;

    /**
     * 服用的时间点
     * 饭前、饭后
     */
    // private String timePoint;

    /**
     * 一日服用多少次
     */
    // private Integer times;

    /**
     * 每次服用多少
     */
    // private Integer everyTime;

    /**
     * 每次服用的单位
     * 片、毫升、克、粒、颗、包
     */
    // private String unit;

    /**
     * 检测消息属性的完整性和正确性
     * RecommandDrugItem.selfValidate()<BR>
     * <P>Author : zhouyanxin </P>
     * <P>Date : 2015年6月22日 </P>
     *
     * @return
     */
    @Override
    public boolean selfValidate() {
        if (productId == null || productId <= 0) {
            LOGGER.error("recommandDrug message item attribute [productId] is invalid, [productId] is {}!", productId);
            return false;
        }
        if (skuId == null || skuId <= 0) {
            LOGGER.error("recommandDrug message item attribute [skuId] is invalid, [skuId] is {}!", skuId);
            return false;
        }
        /*if(StringUtils.isEmpty(commonName)) {
        	LOGGER.error("recommandDrug message item attribute [commonName] is invalid, [commonName] is {}!", commonName);
        	return false;
        }*/
        if (StringUtils.isEmpty(productName)) {
            LOGGER.error("recommandDrug message item attribute [productName] is invalid, [productName] is {}!", productName);
            return false;
        }
        if (quantity == null || quantity <= 0) {
            LOGGER.error("recommandDrug message item attribute [quantiry] is invalid, [quantity] is {}!", quantity);
            return false;
        }
        // if(StringUtils.isEmpty(spec)) {
        // LOGGER.error("recommandDrug message item attribute [spec] is invalid, [spec] is {}!",
        // spec);
        // return false;
        // }
        // if(StringUtils.isEmpty(combin)) {
        // LOGGER.error("recommandDrug message item attribute [combian] is invalid, [combian] is {}!",
        // combin);
        // return false;
        // }

        /*
        if(times == null || times <= 0) {
        	LOGGER.error("recommandDrug message item attribute [times] is invalid, [times] is {}!", times);
        	return false;
        }
        if(StringUtils.isEmpty(timePoint)) {
        	LOGGER.error("recommandDrug message item attribute [timePoint] is invalid, [timePoint] is {}!", timePoint);
        	return false;
        }
        if(everyTime == null || everyTime <= 0) {
        	LOGGER.error("recommandDrug message item attribute [everyTime] is invalid, [everyTime] is {}!", everyTime);
        	return false;
        }
        if(StringUtils.isEmpty(unit)) {
        	LOGGER.error("recommandDrug message item attribute [unit] is invalid, [unit] is {}!", unit);
        	return false;
        }*/
        return true;
    }

    /**
     * @return Long 取得域 productId 的方法。
     */
    public Long getProductId() {
        return productId;
    }

    /**
     * @param productId 对域 productId 的设置方法.
     */
    public void setProductId(Long productId) {
        this.productId = productId;
    }

    /**
     * @return String 取得域 productName 的方法。
     */
    public String getProductName() {
        return productName;
    }

    /**
     * @param productName 对域 productName 的设置方法.
     */
    public void setProductName(String productName) {
        this.productName = productName;
    }

    /**
     * @return Integer 取得域 quantity 的方法。
     */
    public Integer getQuantity() {
        return quantity;
    }

    /**
     * @param quantity 对域 quantity 的设置方法.
     */
    public void setQuantity(Integer quantity) {
        this.quantity = quantity;
    }

    // /**
    // * @return Integer 取得域 times 的方法。
    // */
    // public Integer getTimes() {
    // return times;
    // }
    //
    // /**
    // * @param times 对域 times 的设置方法.
    // */
    // public void setTimes(Integer times) {
    // this.times = times;
    // }
    //
    // /**
    // * @return String 取得域 timePoint 的方法。
    // */
    // public String getTimePoint() {
    // return timePoint;
    // }
    //
    // /**
    // * @param timePoint 对域 timePoint 的设置方法.
    // */
    // public void setTimePoint(String timePoint) {
    // this.timePoint = timePoint;
    // }
    //
    // /**
    // * @return Integer 取得域 everyTime 的方法。
    // */
    // public Integer getEveryTime() {
    // return everyTime;
    // }
    //
    // /**
    // * @param everyTime 对域 everyTime 的设置方法.
    // */
    // public void setEveryTime(Integer everyTime) {
    // this.everyTime = everyTime;
    // }
    //
    // /**
    // * @return String 取得域 unit 的方法。
    // */
    // public String getUnit() {
    // return unit;
    // }
    //
    // /**
    // * @param unit 对域 unit 的设置方法.
    // */
    // public void setUnit(String unit) {
    // this.unit = unit;
    // }

    /**
     * @return String 取得域 bakup 的方法。
     */
    public String getBakup() {
        return bakup;
    }

    /**
     * @param bakup 对域 bakup 的设置方法.
     */
    public void setBakup(String bakup) {
        this.bakup = bakup;
    }

    /**
     * @return Long 取得域 skuId 的方法。
     */
    public Long getSkuId() {
        return skuId;
    }

    /**
     * @param skuId 对域 skuId 的设置方法.
     */
    public void setSkuId(Long skuId) {
        this.skuId = skuId;
    }

    /**
     * @return String 取得域 spec 的方法。
     */
    public String getSpec() {
        return spec;
    }

    /**
     * @param spec 对域 spec 的设置方法.
     */
    public void setSpec(String spec) {
        this.spec = spec;
    }

    /**
     * @return String 取得域 combin 的方法。
     */
    public String getCombin() {
        return combin;
    }

    /**
     * @param combin 对域 combin 的设置方法.
     */
    public void setCombin(String combin) {
        this.combin = combin;
    }

    /**
     * @return String 取得域 usage 的方法。
     */
    public String getUsage() {
        return usage;
    }

    /**
     * @param usage 对域 usage 的设置方法.
     */
    public void setUsage(String usage) {
        this.usage = usage;
    }

    public String getCommonName() {
        return commonName;
    }

    public void setCommonName(String commonName) {
        this.commonName = commonName;
    }

}
